# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.CloudScheduler.V1.Model.AppEngineHttpTarget do
  @moduledoc """
  App Engine target. The job will be pushed to a job handler by means of an HTTP request via an http_method such as HTTP POST, HTTP GET, etc. The job is acknowledged by means of an HTTP response code in the range [200 - 299]. Error 503 is considered an App Engine system error instead of an application error. Requests returning error 503 will be retried regardless of retry configuration and not counted against retry counts. Any other response code, or a failure to receive a response before the deadline, constitutes a failed attempt.

  ## Attributes

  *   `appEngineRouting` (*type:* `GoogleApi.CloudScheduler.V1.Model.AppEngineRouting.t`, *default:* `nil`) - App Engine Routing setting for the job.
  *   `body` (*type:* `String.t`, *default:* `nil`) - Body. HTTP request body. A request body is allowed only if the HTTP method is POST or PUT. It will result in invalid argument error to set a body on a job with an incompatible HttpMethod.
  *   `headers` (*type:* `map()`, *default:* `nil`) - HTTP request headers. This map contains the header field names and values. Headers can be set when the job is created. Cloud Scheduler sets some headers to default values: * `User-Agent`: By default, this header is `"AppEngine-Google; (+http://code.google.com/appengine)"`. This header can be modified, but Cloud Scheduler will append `"AppEngine-Google; (+http://code.google.com/appengine)"` to the modified `User-Agent`. * `X-CloudScheduler`: This header will be set to true. * `X-CloudScheduler-JobName`: This header will contain the job name. * `X-CloudScheduler-ScheduleTime`: For Cloud Scheduler jobs specified in the unix-cron format, this header will contain the job schedule as an offset of UTC parsed according to RFC3339. If the job has a body and the following headers are not set by the user, Cloud Scheduler sets default values: * `Content-Type`: This will be set to `"application/octet-stream"`. You can override this default by explicitly setting `Content-Type` to a particular media type when creating the job. For example, you can set `Content-Type` to `"application/json"`. The headers below are output only. They cannot be set or overridden: * `Content-Length`: This is computed by Cloud Scheduler. * `X-Google-*`: For Google internal use only. * `X-AppEngine-*`: For Google internal use only. In addition, some App Engine headers, which contain job-specific information, are also be sent to the job handler.
  *   `httpMethod` (*type:* `String.t`, *default:* `nil`) - The HTTP method to use for the request. PATCH and OPTIONS are not permitted.
  *   `relativeUri` (*type:* `String.t`, *default:* `nil`) - The relative URI. The relative URL must begin with "/" and must be a valid HTTP relative URL. It can contain a path, query string arguments, and `#` fragments. If the relative URL is empty, then the root path "/" will be used. No spaces are allowed, and the maximum length allowed is 2083 characters.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :appEngineRouting => GoogleApi.CloudScheduler.V1.Model.AppEngineRouting.t() | nil,
          :body => String.t() | nil,
          :headers => map() | nil,
          :httpMethod => String.t() | nil,
          :relativeUri => String.t() | nil
        }

  field(:appEngineRouting, as: GoogleApi.CloudScheduler.V1.Model.AppEngineRouting)
  field(:body)
  field(:headers, type: :map)
  field(:httpMethod)
  field(:relativeUri)
end

defimpl Poison.Decoder, for: GoogleApi.CloudScheduler.V1.Model.AppEngineHttpTarget do
  def decode(value, options) do
    GoogleApi.CloudScheduler.V1.Model.AppEngineHttpTarget.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.CloudScheduler.V1.Model.AppEngineHttpTarget do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
